package com.jingxuan.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 权限检查工具类
 */
@Slf4j
@Component
public class PermissionCheckUtil {
    
    /**
     * 检查用户是否拥有指定角色
     * @param userRoles 用户角色列表
     * @param requiredRole 需要的角色
     * @return 是否拥有该角色
     */
    public static boolean hasRole(List<String> userRoles, String requiredRole) {
        if (userRoles == null || userRoles.isEmpty()) {
            return false;
        }
        return userRoles.contains(requiredRole);
    }
    
    /**
     * 检查用户是否拥有任意一个指定角色
     * @param userRoles 用户角色列表
     * @param requiredRoles 需要的角色列表
     * @return 是否拥有任意一个角色
     */
    public static boolean hasAnyRole(List<String> userRoles, String... requiredRoles) {
        if (userRoles == null || userRoles.isEmpty()) {
            return false;
        }
        for (String role : requiredRoles) {
            if (userRoles.contains(role)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 检查用户是否拥有指定权限
     * @param userPermissions 用户权限列表
     * @param requiredPermission 需要的权限
     * @return 是否拥有该权限
     */
    public static boolean hasPermission(List<String> userPermissions, String requiredPermission) {
        if (userPermissions == null || userPermissions.isEmpty()) {
            return false;
        }
        return userPermissions.contains(requiredPermission);
    }
    
    /**
     * 检查用户是否拥有所有指定权限
     * @param userPermissions 用户权限列表
     * @param requiredPermissions 需要的权限列表
     * @return 是否拥有所有权限
     */
    public static boolean hasAllPermissions(List<String> userPermissions, String... requiredPermissions) {
        if (userPermissions == null || userPermissions.isEmpty()) {
            return false;
        }
        for (String permission : requiredPermissions) {
            if (!userPermissions.contains(permission)) {
                return false;
            }
        }
        return true;
    }
    
    /**
     * 检查用户是否拥有任意一个指定权限
     * @param userPermissions 用户权限列表
     * @param requiredPermissions 需要的权限列表
     * @return 是否拥有任意一个权限
     */
    public static boolean hasAnyPermission(List<String> userPermissions, String... requiredPermissions) {
        if (userPermissions == null || userPermissions.isEmpty()) {
            return false;
        }
        for (String permission : requiredPermissions) {
            if (userPermissions.contains(permission)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 检查是否为管理员
     * @param userRoles 用户角色列表
     * @return 是否为管理员
     */
    public static boolean isAdmin(List<String> userRoles) {
        return hasRole(userRoles, "ROLE_ADMIN");
    }
}

